#ifndef GRAPHSUPPORT_H_
#define GRAPHSUPPORT_H_

/**
 * this is header-only library for work with graphs
 *
 * main goal of the library is to let the author of the library to become familiar with <<functional-programming-like>>
 * use cases of c++ templates, see boost::bind technology for example.
 *
 * secondary goal is to create quick and flexible library which allows to deal with graphs with
 * flexible structure, see EdgeAttributes use cases for details.
 */

/**
 * GRAPH_SUPPORT_NS is a macros which allows to use different versions of the library.
 * in release version <<GRAPH_SUPPORT_NS>> would be replaced with <<graph_support_[version-No]>>
 */

// TODO: implement release task in build which will replace GRAPH_SUPPORT_NS
/**
 * how to avoid graph_support versions HELL
 * TODO 0 write the doc
 */

/**
 * [ about version id and namespace ]
 * the library version has: major, minor and patch numbers.
 * progress in patch No - 4 bugfixes
 * progress in minor No - 4 features adding
 * progress in patch and minor numbers implies "backward compatibility"
 * progress in major number implies re-engendering and backward compatibility is not guaranteed
 * graph_support namespace actualli is:
 * graph_support_<major>
 */
# define BUILD_GS_NAMESPACE( MajorGSVersion ) graph_support ## _ ## MajorGSVersion
# ifndef GRAPH_SUPPORT_4_BOOSTUNITTEST
// MajorGSVersion = 0
#  define GRAPH_SUPPORT_NS BUILD_GS_NAMESPACE( 0 )
# else
#  define GRAPH_SUPPORT_NS graph_support_4_boostunittes
# endif

# ifdef FORCED_GS_NAMESPACE
#  undef GRAPH_SUPPORT_NS
#  define GRAPH_SUPPORT_NS FORCED_GS_NAMESPACE
# endif

#endif /* GRAPHSUPPORT_H_ */
